package com.cg.config;

import com.cg.entity.DictPositionKeyword;
import com.cg.mapper.DictPositionKeywordMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;

/**
 * 启动任务配置
 * 确保必要的目录和文件存在
 */
@Slf4j
@Component
public class StartupTasks implements CommandLineRunner {

    @Value("${app.file.upload.path:classpath:pdf}")
    private String uploadPath;
    
    @Autowired
    private DictPositionKeywordMapper dictPositionKeywordMapper;

    @Override
    public void run(String... args) throws Exception {
        log.info("开始执行启动任务...");
        
        // 确保PDF目录存在
        ensurePdfDirectoryExists();
        
        // 初始化岗位关键词数据
        initPositionKeywords();
        
        log.info("启动任务执行完成");
    }
    
    /**
     * 确保PDF目录存在
     */
    private void ensurePdfDirectoryExists() {
        try {
            // 获取resources目录的绝对路径
            String resourcesPath = getResourcesPath();
            Path pdfDir = Paths.get(resourcesPath, "pdf");
            
            if (!Files.exists(pdfDir)) {
                Files.createDirectories(pdfDir);
                log.info("创建PDF目录: {}", pdfDir);
            } else {
                log.info("PDF目录已存在: {}", pdfDir);
            }
            
            // 检查目录权限
            if (!Files.isWritable(pdfDir)) {
                log.warn("PDF目录不可写: {}", pdfDir);
            }
            
        } catch (Exception e) {
            log.error("创建PDF目录失败: {}", e.getMessage(), e);
        }
    }
    
    /**
     * 获取resources目录的绝对路径
     */
    private String getResourcesPath() {
        // 直接使用项目根目录下的src/main/resources，而不是编译后的target/classes
        String projectRoot = System.getProperty("user.dir");
        String resourcesPath = projectRoot + "/src/main/resources";
        log.info("使用项目根目录下的resources目录: {}", resourcesPath);
        return resourcesPath;
    }
    
    /**
     * 初始化岗位关键词数据
     */
    private void initPositionKeywords() {
        try {
            log.info("开始初始化岗位关键词数据...");
            
            List<String> keywords = Arrays.asList(
                "全栈", "后端", "C/C++/C#", "前端", "Golang", "Java", 
                "Javascript", "NodeJS", "运维", "Python", "测试", "Web"
            );
            
            for (String keywordName : keywords) {
                // 检查关键词是否已存在
                DictPositionKeyword existingKeyword = dictPositionKeywordMapper.getByName(keywordName);
                if (existingKeyword == null) {
                    // 创建新关键词
                    DictPositionKeyword keyword = new DictPositionKeyword();
                    keyword.setName(keywordName);
                    
                    // 插入关键词
                    dictPositionKeywordMapper.insert(keyword);
                    log.info("插入关键词成功: {}", keywordName);
                } else {
                    log.info("关键词已存在: {}", keywordName);
                }
            }
            
            log.info("岗位关键词数据初始化完成");
            
        } catch (Exception e) {
            log.error("初始化岗位关键词数据失败: {}", e.getMessage(), e);
        }
    }
}


